home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / QuickDraw3D 1.6 SDK / Mac SampleCode New for 1.6 / WorldRayPickSample / Source / WRay_System.c < prev   
Encoding:
C/C++ Source or Header  |  1999-05-20  |  3.7 KB  |  225 lines  |  [TEXT/CWIE]

  1. /* 
  2.  *    WRay_System.c
  3.  *
  4.  *    QuickDraw 3D 1.6 Sample
  5.  *    Robert Dierkes
  6.  *
  7.  *     07/28/98    RDD        Created.
  8.  */
  9.  
  10. /*------------------*/
  11. /*    Include Files    */
  12. /*------------------*/
  13. #include "QD3D.h"
  14.  
  15. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  16. #include <CodeFragments.h>    /* kUnresolvedCFragSymbolAddress */
  17. #include <Events.h>            /* KeyMap */
  18. #include <Gestalt.h>
  19. #include <Sound.h>            /* SysBeep, SndPlay */
  20. #include <Resources.h>
  21. #endif
  22.  
  23. #include "WRay_Main.h"
  24. #include "WRay_System.h"
  25. #include "WRay_Error.h"
  26.  
  27.  
  28. /*----------------------*/
  29. /*    Global Declarations    */
  30. /*----------------------*/
  31. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  32. static    SndChannelPtr    gChannel = NULL;
  33. #endif
  34.  
  35. static    TQ3Boolean        gPlaySound = kQ3False;
  36.  
  37.  
  38. /*
  39.  *    QuickDraw3D_Initialize
  40.  */
  41. TQ3Boolean QuickDraw3D_Initialize(
  42.             void)
  43. {
  44.     TQ3Status    status = kQ3Failure;
  45.     OSErr        error;
  46.     long        response;
  47.  
  48.     error = Gestalt(gestaltQD3D, &response);
  49.  
  50.     if ((error != noErr)  ||
  51.         (! (response & (1 << gestaltQD3DPresent)))) {
  52.  
  53.         Error_ShowMessage(kQuickDraw3DNotInstalledStr);
  54.         return kQ3False;
  55.     }
  56.  
  57.     /*
  58.      * Test for specific symbol as recommended in develop, March 1995
  59.      * NOTE: QuickDraw3DLib must be weak linked for this comparison to work.
  60.      */
  61.     if (((void *) Q3Initialize) == (void *) kUnresolvedCFragSymbolAddress) {
  62.         Error_ShowMessage(kQuickDraw3DNotInstalledStr);
  63.         return kQ3False;
  64.     }
  65.  
  66.     status = Q3Initialize();
  67.     if (status == kQ3Failure) {
  68.         ERROR_DEBUG_STR ("QuickDraw3D_Initialize: Q3Initialize returned failure.");
  69.         return kQ3False;
  70.     }
  71.  
  72.     error = Gestalt(gestaltQD3DVersion, &response);
  73.  
  74.     if ((error != noErr)  ||
  75.         (response < kQD3DGestaltVersion_1_6_0)) {
  76.  
  77.         Error_ShowMessage(kQuickDraw3DNotCurrentStr);
  78.         return kQ3False;
  79.     }
  80.  
  81.     return kQ3True;
  82. }
  83.  
  84.  
  85. /*
  86.  *    QuickDraw3D_Exit
  87.  */
  88. TQ3Boolean QuickDraw3D_Exit(
  89.             void)
  90. {
  91.     TQ3Status    status;
  92.     TQ3Boolean    isGood = kQ3True;
  93.  
  94.     status = Q3Exit();
  95.     if (status == kQ3Failure) {
  96.         ERROR_DEBUG_STR ("QuickDraw3D_Exit: Q3Exit returned failure.");
  97.         isGood = kQ3False;
  98.     }
  99.  
  100. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  101.     if (gChannel != NULL) {
  102.         SndDisposeChannel(gChannel, kQ3True);
  103.         gChannel = NULL;
  104.     }
  105. #endif
  106.  
  107.     return isGood;
  108. }
  109.  
  110.  
  111. #pragma mark -
  112.  
  113. /*
  114.  *    System_IsKeyPressed
  115.  *        Returns true if key is pressed, false otherwise.
  116.  *
  117.  *    Passed:
  118.  *        keyCode - key code to test
  119.  *
  120.  *    Global:
  121.  *        Nothing
  122.  *
  123.  *    Returned:
  124.  *        Returns true if key is down, false otherwise.
  125.  */
  126. Boolean System_IsKeyPressed (
  127.             unsigned short keyCode)
  128. {
  129. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  130.     KeyMap            keyMap;
  131.     unsigned char    *pKeyMap;
  132.  
  133.     GetKeys (keyMap);
  134.     pKeyMap = (unsigned char *) keyMap;
  135.  
  136.     return ((pKeyMap [keyCode >> 3] >> (keyCode & 7)) & 1);
  137. #endif
  138. }
  139.  
  140.  
  141. /*
  142.  *    System_Beep
  143.  */
  144. void System_Beep (
  145.     void)
  146. {
  147. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  148.     SysBeep(1);
  149. #endif
  150. }
  151.  
  152.  
  153. /*
  154.  *    System_GetSound
  155.  */
  156. TQ3Boolean System_GetSound (
  157.     void)
  158. {
  159.     return gPlaySound;
  160. }
  161.  
  162.  
  163. /*
  164.  *    System_SetSound
  165.  */
  166. void System_SetSound (
  167.     TQ3Boolean    newState)
  168. {
  169.     gPlaySound = newState;
  170. }
  171.  
  172.  
  173. /*
  174.  *    System_Sound
  175.  */
  176. void System_Sound (
  177.     void)
  178. {
  179. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  180.  
  181.     static    Handle sndHandle = NULL;
  182.  
  183.     #define    kSoundRsrcID    -24680
  184.  
  185.     if (gPlaySound == kQ3True) {
  186.  
  187.         if (sndHandle == NULL) {
  188.             /* First time */
  189.             OSErr    osErr = noErr;
  190.  
  191.             if (gChannel == NULL) {
  192.                 osErr = SndNewChannel(&gChannel, 0, 0, 0);
  193.             }
  194.  
  195.             /* Keep sound resource locked and loaded */
  196.             sndHandle = GetResource('snd ', kSoundRsrcID);
  197.             if (sndHandle != NULL) {
  198.                 HLock(sndHandle);
  199. //                HUnlock(sndHandle);
  200.             }
  201.         }
  202.  
  203.         if (sndHandle != NULL) {
  204.             SndPlay(gChannel, (SndListHandle)sndHandle, 1);
  205.         }
  206.     }
  207. #endif
  208. }
  209.  
  210.  
  211. /*
  212.  *    System_RandomFloat
  213.  *
  214.  *    Returns a float value between 0.1 and 1.0, inclusive.
  215.  */
  216. float System_RandomFloat(
  217.             void)
  218. {
  219.     float    value;
  220.  
  221.     value = (((Random() * TickCount()) % 10) + 1) * 0.1f;
  222.  
  223.     return value;
  224. }
  225.